package page

import (
	"blog/model"
	"blog/service/data"
	"errors"
)

type UserPageService struct {
	userDataService *data.UserDataService
}

func NewUserPageService() *UserPageService {
	return &UserPageService{
		userDataService: &data.UserDataService{},
	}
}

// Login 用户登录（页面逻辑）
func (s *UserPageService) Login(username, password string) (*model.AdminUser, error) {
	// 页面层处理：参数验证
	if username == "" || password == "" {
		return nil, model.ERR_NO_LOGIN
	}

	// 调用数据层
	return s.userDataService.Login(username, password)
}

// CreateLoginSession 创建登录会话（页面逻辑）
func (s *UserPageService) CreateLoginSession(user *model.AdminUser, sessionKey, ip, userAgent string) error {
	// 页面层处理：参数验证
	if user == nil || sessionKey == "" {
		return errors.New("无效的用户或会话密钥")
	}

	// 调用数据层
	return s.userDataService.CreateLoginSession(user, sessionKey, ip, userAgent)
}

// GetUserBySession 根据会话获取用户信息（页面逻辑）
func (s *UserPageService) GetUserBySession(sessionKey string) (*model.AdminUser, error) {
	// 页面层处理：参数验证
	if sessionKey == "" {
		return nil, errors.New("会话密钥不能为空")
	}

	// 调用数据层
	return s.userDataService.GetUserBySession(sessionKey)
}

// Logout 用户登出（页面逻辑）
func (s *UserPageService) Logout(sessionKey string) error {
	// 页面层处理：参数验证
	if sessionKey == "" {
		return errors.New("会话密钥不能为空")
	}

	// 调用数据层
	return s.userDataService.Logout(sessionKey)
}

// CreateUser 创建用户（页面逻辑）
func (s *UserPageService) CreateUser(user *model.AdminUser) error {
	// 页面层处理：数据验证
	if user == nil {
		return errors.New("用户信息不能为空")
	}
	if user.Name == "" {
		return errors.New("用户名不能为空")
	}
	if user.Pass == "" {
		return errors.New("密码不能为空")
	}

	// 调用数据层
	return s.userDataService.CreateUser(user)
}

// UpdateUser 更新用户（页面逻辑）
func (s *UserPageService) UpdateUser(user *model.AdminUser) error {
	// 页面层处理：数据验证
	if user == nil {
		return errors.New("用户信息不能为空")
	}
	if user.Name == "" {
		return errors.New("用户名不能为空")
	}

	// 调用数据层
	return s.userDataService.UpdateUser(user)
}

// GetUserByID 根据ID获取用户（页面逻辑）
func (s *UserPageService) GetUserByID(id int64) (*model.AdminUser, error) {
	// 页面层处理：参数验证
	if id <= 0 {
		return nil, errors.New("用户ID无效")
	}

	// 调用数据层
	return s.userDataService.GetUserByID(id)
}

// GetAllUsers 获取所有用户（页面逻辑）
func (s *UserPageService) GetAllUsers() ([]model.AdminUser, error) {
	// 直接调用数据层
	return s.userDataService.GetAllUsers()
}
